昨天狗东的LAMY钢笔又在搞活动,然而看到的时候已经涨回了原价。一怒之下,写了一个JS脚本自动查询促销信息并通过微信来通知我。
准备
数据采集
数据采集方面,我们使用Node.js来实现一个爬虫,并定时对页面进行访问刷新,随时监控数据。
使用到的依赖如下:
cheerio :JS网页解析,语法类似JQuery
superagent :网络请求库
system-sleep :调用系统sleep
moment :对时间进行格式化,方便打Log
消息通知
微信通知我们通过Server酱实现,这是个什么东西呢?
Server酱
是什么
「Server酱」,英文名「ServerChan」,是一款「程序员」和「服务器」之间的通信软件。
说人话?就是从服务器推报警和日志到手机的工具。
开通并使用上它,只需要一分钟:
登入:用GitHub账号登入网站,就能获得一个SCKEY(在「发送消息」页面)
绑定:点击「微信推送」,扫码关注同时即可完成绑定
发消息:往 http://sc.ftqq.com/SCKEY.send 发GET请求,就可以在微信里收到消息啦
Server酱使用方法就是这么简单了,注册、绑定结束后你会拿到一个URL,我们只需要向这个URL发送消息就可以在微信收到通知了。
代码实现
var cheerio = require('cheerio');
var superagent = require('superagent')
var sleep = require('system-sleep');
var moment = require('moment')
//URLs
var base = 'http://http://www.baicaio.com/'
var collection = 'http://www.baicaio.com/index-index-type--tab-isnice-dss-cc'
var wechat = 'http://sc.ftqq.com/ ##Your own url.send'
//哦莫西罗伊,也就是关注的关键词咯
var omxly = ['凌美', '耳机', '钢笔', '鼠标', '显示器', '电脑', '手机', '电视']
//通知过的内容的href,防止多次通知相同内容
var notificated = []
function refresh(callback) {
console.log('检查优惠信息 '+ moment().format('MMMM Do YYYY, h:mm:ss a'))
var items = []
superagent
.get(collection)
.end(function (err, res) {
var $ = cheerio.load(res.text)
$('#C_drc ').find('li').each(function (idx, element) {
$element = $(element)
var href = $element.find('h2 > a').attr('href')
var title = $element.find('h2 > a').attr('title')
var price = $element.find('h2 > a > em').text()
items.push({
href: href,
title: title,
price: price
})
})
check(items, callback)
})
}
function check(items, callback) {
for (index in items) {
var item = items[index]
for (word_index in omxly) {
var flag = true
var word = omxly[word_index]
if (String(item.title).indexOf(omxly[word_index]) !== -1) {
for (href_index in notificated) {
if (notificated[href_index] == item.href) {
flag = false
callback()
break
}
}
if (flag) {
console.log('发现关注商品')
console.log(item.title, item.price)
notificated.push(item.href)
wechatNotification(word,item.title, item.price, item.href, callback)
}
}
}
}
}
function wechatNotification(word,title, desc, url, callback) {
var text = '主人,发现了你喜欢的:_' +
'' + word
desc = '['+ title + ']('+ base + url +')\n\n' + desc
desc += '\n\n'
desc += '时间:'+moment().format('MMMM Do YYYY, h:mm:ss a')
superagent
.get(wechat)
.query({text: text})
.query({desp: desc})
.end(function (err, sres) {
callback()
})
}
while (true) {
refresh({})
sleep(5 * 1000)
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。